home *** CD-ROM | disk | FTP | other *** search
/ STraTOS 1997 April & May / STraTOS 1 - 1997 April & May.iso / CD01 / INTERNET / SITES / RAND / UNSPLIT / BM214SRC.ZIP / 68030 / INCLUDE / DSPLIB.S < prev    next >
Encoding:
Text File  |  1993-07-26  |  5.5 KB  |  356 lines

  1. ;    opt    l2
  2. ;    xdef    IsDspDrv            ;+
  3. ;    xdef    DspDoBlock,DspBlkHandShake,DspBlkUnpacked
  4. ;    xdef    DspInStream,DspOutStream,DspIOStream
  5. ;    xdef    DspRemoveInterrupts,DspGetWordSize,DspLock,DspUnlock
  6. ;    xdef    DspAvailable,DspReserve,DspLoadProg,DspExecProg,DspExecBoot
  7. ;    xdef    DspLodToBinary,DspTriggerHC,DspRequestUniqueAbility
  8. ;    xdef    DspGetProgAbility,DspFlushSubroutines,DspLoadSubroutine
  9. ;    xdef    DspInqSubrAbility,DspRunSubroutine
  10. ;    xdef    DspHf0,DspHf1,DspHf2,DspHf3
  11. ;    xdef    DspBlkWords,DspBlkBytes,DspHStat
  12. ;    xdef    DspOutStat,DspInStat
  13. ;    output    .lib
  14.  
  15. DOBLOCK            =    0
  16. BLKHANDSHAKE        =    1
  17. BLKUNPACKED            =    2
  18. INSTREAM            =    3
  19. OUTSTREAM            =    4
  20. IOSTREAM            =    5
  21. REMOVEINTERRUPTS        =    6
  22. GETWORDSIZE            =    7
  23. LOCK                =    8
  24. UNLOCK            =    9
  25. AVAILABLE            =    10
  26. RESERVE            =    11
  27. LOADPROG            =    12
  28. EXECPROG            =    13
  29. EXECBOOT            =    14
  30. LODTOBINARY            =    15
  31. TRIGGERHC            =    16
  32. REQUESTUNIQUEABILITY    =    17
  33. GETPROGABILITY        =    18
  34. FLUSHSUBROUTINES        =    19
  35. LOADSUBROUTINE        =    20
  36. INQSUBRABILITY        =    21
  37. RUNSUBROUTINE        =    22
  38. HF0                =    23
  39. HF1                =    24
  40. HF2                =    25
  41. HF3                =    26
  42. BLKWORDS            =    27
  43. BLKBYTES            =    28
  44. HSTAT                =    29
  45. SETVECTOR            =    30
  46.  
  47. CALLDRVR        macro
  48.     moveq        \1,d0
  49.     add.w        drvr_start(pc),d0
  50.     move.w    d0,-(sp)
  51.     trap        #14
  52.     ENDM
  53.  
  54.     TEXT
  55.  
  56. IsDspDrv:
  57.     move.w    #500,drvr_start        ;rev 1-2
  58.     bsr        DspGetWordSize
  59.     cmp.w        #500+GETWORDSIZE,d0
  60.     bne.s        .ok
  61.     move.w    #96,drvr_start        ;rev 3-4
  62.     bsr        DspGetWordSize
  63.     cmp.w        #96+GETWORDSIZE,d0
  64.     bne.s        .ok
  65. .no:    moveq        #0,d0
  66. .ok:    rts
  67.  
  68. drvr_start:        ds.w    1
  69.  
  70. DspDoBlock:
  71.     move.l    a2,-(sp)
  72.     move.l    d1,-(sp)
  73.     move.l    a1,-(sp)
  74.     move.l    d0,-(sp)
  75.     move.l    a0,-(sp)
  76.     CALLDRVR    #DOBLOCK
  77.     lea        18(sp),sp
  78.     move.l    (sp)+,a2
  79.     rts
  80.  
  81. DspBlkHandShake:
  82.     move.l    a2,-(sp)
  83.     move.l    d1,-(sp)
  84.     move.l    a1,-(sp)
  85.     move.l    d0,-(sp)
  86.     move.l    a0,-(sp)
  87.     CALLDRVR    #BLKHANDSHAKE
  88.     lea        18(sp),sp
  89.     move.l    (sp)+,a2
  90.     rts
  91.  
  92. DspBlkUnpacked:
  93.     move.l    a2,-(sp)
  94.     move.l    d1,-(sp)
  95.     move.l    a1,-(sp)
  96.     move.l    d0,-(sp)
  97.     move.l    a0,-(sp)
  98.     CALLDRVR    #BLKUNPACKED
  99.     lea        18(sp),sp
  100.     move.l    (sp)+,a2
  101.     rts
  102.  
  103. DspInStream:
  104.     move.l    a2,-(sp)
  105.     move.l    a1,-(sp)
  106.     move.l    d1,-(sp)
  107.     move.l    d0,-(sp)
  108.     move.l    a0,-(sp)
  109.     CALLDRVR    #INSTREAM
  110.     lea        18(sp),sp
  111.     move.l    (sp)+,a2
  112.     rts
  113.  
  114. DspOutStream:
  115.     move.l    a2,-(sp)
  116.     move.l    a1,-(sp)
  117.     move.l    d1,-(sp)
  118.     move.l    d0,-(sp)
  119.     move.l    a0,-(sp)
  120.     CALLDRVR    #OUTSTREAM
  121.     lea        18(sp),sp
  122.     move.l    (sp)+,a2
  123.     rts
  124.  
  125. DspIOStream:
  126.     move.l    a2,-(sp)
  127.     move.l    8(sp),-(sp)
  128.     move.l    d2,-(sp)
  129.     move.l    d1,-(sp)
  130.     move.l    d0,-(sp)
  131.     move.l    a1,-(sp)
  132.     move.l    a0,-(sp)
  133.     CALLDRVR    #IOSTREAM
  134.     lea        26(sp),sp
  135.     move.l    (sp)+,a2
  136.     rts
  137.  
  138. DspRemoveInterrupts:
  139.     move.l    a2,-(sp)
  140.     move.w    d0,-(sp)
  141.     CALLDRVR    #REMOVEINTERRUPTS
  142.     addq.w    #4,sp
  143.     move.l    (sp)+,a2
  144.     rts
  145.  
  146. DspGetWordSize:
  147.     move.l    a2,-(sp)
  148.     CALLDRVR    #GETWORDSIZE
  149.     addq.w    #2,sp
  150.     move.l    (sp)+,a2
  151.     rts
  152.  
  153. DspLock:
  154.     move.l    a2,-(sp)
  155.     CALLDRVR    #LOCK
  156.     addq.w    #2,sp
  157.     move.l    (sp)+,a2
  158.     rts
  159.  
  160. DspUnlock:
  161.     move.l    a2,-(sp)
  162.     CALLDRVR    #UNLOCK
  163.     addq.w    #2,sp
  164.     move.l    (sp)+,a2
  165.     rts
  166.  
  167. DspAvailable:
  168.     move.l    a2,-(sp)
  169.     move.l    a1,-(sp)
  170.     move.l    a0,-(sp)
  171.     CALLDRVR    #AVAILABLE
  172.     lea        10(sp),sp
  173.     move.l    (sp)+,a2
  174.     rts
  175.  
  176. DspReserve:
  177.     move.l    a2,-(sp)
  178.     move.l    d1,-(sp)
  179.     move.l    d0,-(sp)
  180.     CALLDRVR    #RESERVE
  181.     lea        10(sp),sp
  182.     move.l    (sp)+,a2
  183.     rts
  184.  
  185. DspLoadProg:
  186.     move.l    a2,-(sp)
  187.     move.w    d0,-(sp)
  188.     move.l    a0,-(sp)
  189.     CALLDRVR    #LOADPROG
  190.     addq.w    #8,sp
  191.     move.l    (sp)+,a2
  192.     rts
  193.  
  194. DspExecProg:
  195.     move.l    a2,-(sp)
  196.     move.w    d1,-(sp)
  197.     move.l    d0,-(sp)
  198.     move.l    a0,-(sp)
  199.     CALLDRVR    #EXECPROG
  200.     lea        12(sp),sp
  201.     move.l    (sp)+,a2
  202.     rts
  203.  
  204. DspExecBoot:
  205.     move.l    a2,-(sp)
  206.     move.w    d1,-(sp)
  207.     move.l    d0,-(sp)
  208.     move.l    a0,-(sp)
  209.     CALLDRVR    #EXECBOOT
  210.     lea        12(sp),sp
  211.     move.l    (sp)+,a2
  212.     rts
  213.  
  214. DspLodToBinary:
  215.     move.l    a2,-(sp)
  216.     move.l    a1,-(sp)
  217.     move.l    a0,-(sp)
  218.     CALLDRVR    #LODTOBINARY
  219.     lea        10(sp),sp
  220.     move.l    (sp)+,a2
  221.     rts
  222.  
  223. DspTriggerHC:
  224.     move.l    a2,-(sp)
  225.     move.w    d0,-(sp)
  226.     CALLDRVR    #TRIGGERHC
  227.     addq.w    #4,sp
  228.     move.l    (sp)+,a2
  229.     rts
  230.  
  231. DspRequestUniqueAbility:
  232.     move.l    a2,-(sp)
  233.     CALLDRVR    #REQUESTUNIQUEABILITY
  234.     addq.w    #2,sp
  235.     move.l    (sp)+,a2
  236.     rts
  237.  
  238. DspGetProgAbility:
  239.     move.l    a2,-(sp)
  240.     CALLDRVR    #GETPROGABILITY
  241.     addq.w    #2,sp
  242.     move.l    (sp)+,a2
  243.     rts
  244.  
  245. DspFlushSubroutines:
  246.     move.l    a2,-(sp)
  247.     CALLDRVR    #FLUSHSUBROUTINES
  248.     addq.w    #2,sp
  249.     move.l    (sp)+,a2
  250.     rts
  251.  
  252. DspLoadSubroutine:
  253.     move.l    a2,-(sp)
  254.     move.w    d1,-(sp)
  255.     move.l    d0,-(sp)
  256.     move.l    a0,-(sp)
  257.     CALLDRVR    #LOADSUBROUTINE
  258.     lea        12(sp),sp
  259.     move.l    (sp)+,a2
  260.     rts
  261.  
  262. DspInqSubrAbility:
  263.     move.l    a2,-(sp)
  264.     move.w    d0,-(sp)
  265.     CALLDRVR    #INQSUBRABILITY
  266.     addq.w    #4,sp
  267.     move.l    (sp)+,a2
  268.     rts
  269.  
  270. DspRunSubroutine:
  271.     move.l    a2,-(sp)
  272.     move.w    d0,-(sp)
  273.     CALLDRVR    #RUNSUBROUTINE
  274.     addq.w    #4,sp
  275.     move.l    (sp)+,a2
  276.     rts
  277.  
  278. DspHf0:
  279.     move.l    a2,-(sp)
  280.     move.w    d0,-(sp)
  281.     CALLDRVR    #HF0
  282.     addq.w    #4,sp
  283.     move.l    (sp)+,a2
  284.     rts
  285.  
  286. DspHf1:
  287.     move.l    a2,-(sp)
  288.     move.w    d0,-(sp)
  289.     CALLDRVR    #HF1
  290.     addq.w    #4,sp
  291.     move.l    (sp)+,a2
  292.     rts
  293.  
  294. DspHf2:
  295.     move.l    a2,-(sp)
  296.     CALLDRVR    #HF2
  297.     addq.w    #2,sp
  298.     move.l    (sp)+,a2
  299.     rts
  300.  
  301. DspHf3:
  302.     move.l    a2,-(sp)
  303.     CALLDRVR    #HF3
  304.     addq.w    #2,sp
  305.     move.l    (sp)+,a2
  306.     rts
  307.  
  308. DspBlkWords:
  309.     move.l    a2,-(sp)
  310.     move.l    d1,-(sp)
  311.     move.l    a1,-(sp)
  312.     move.l    d0,-(sp)
  313.     move.l    a0,-(sp)
  314.     CALLDRVR    #BLKWORDS
  315.     lea        18(sp),sp
  316.     move.l    (sp)+,a2
  317.     rts
  318.  
  319. DspBlkBytes:
  320.     move.l    a2,-(sp)
  321.     move.l    d1,-(sp)
  322.     move.l    a1,-(sp)
  323.     move.l    d0,-(sp)
  324.     move.l    a0,-(sp)
  325.     CALLDRVR    #BLKBYTES
  326.     lea        18(sp),sp
  327.     move.l    (sp)+,a2
  328.     rts
  329.  
  330. DspHStat:
  331.     move.l    a2,-(sp)
  332.     CALLDRVR    #HSTAT
  333.     addq.w    #2,sp
  334.     move.l    (sp)+,a2
  335.     rts
  336.  
  337. DspOutStat:
  338.     bsr        DspHStat
  339.     lsr.w        d0
  340.     subx.w    d1,d1
  341.     neg.w        d1
  342.     lsr.w        d0
  343.     and.w        #6,d0
  344.     or.w        d1,d0
  345.     rts
  346.  
  347. DspInStat:
  348.     bsr        DspHStat
  349.     lsr.w        #2,d0
  350.     subx.w    d1,d1
  351.     neg.w        d1
  352.     and.w        #6,d0
  353.     or.w        d1,d0
  354.     rts
  355.  
  356.